/*
 * Copyright 2013 Nicholas Bilyk
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package jasper.model.elements;

/**
 * The schema element defines the root element of a schema.
 *
 * Parent elements: NONE
 *
 * Source: http://www.w3schools.com/schema/el_schema.asp
 *
 * @author nbilyk
 */
public class Schema extends SchemaNode {

	/**
	 * Optional. Specifies a unique ID for the element
	 */
	public String id;

	/**
	 * Optional. The form for attributes declared in the target namespace of this schema. The value must be
	 * "qualified" or "unqualified". Default is "unqualified". "unqualified" indicates that attributes from the
	 * target namespace are not required to be qualified with the namespace prefix. "qualified" indicates that
	 * attributes from the target namespace must be qualified with the namespace prefix.
	 */
	public String attributeFormDefault;

	/**
	 * Optional. The form for elements declared in the target namespace of this schema. The value must be "qualified"
	 * or "unqualified". Default is "unqualified". "unqualified" indicates that elements from the target namespace
	 * are not required to be qualified with the namespace prefix. "qualified" indicates that elements from the
	 * target namespace must be qualified with the namespace prefix.
	 */
	public String elementFormDefault = "qualified";

	/**
	 * Optional. Specifies the default value of the block attribute on element and complexType elements in the target namespace. The block attribute prevents a complex type (or element) that has a specified type of derivation from being used in place of this complex type. This value can contain #all or a list that is a subset of extension, restriction, or substitution:
	 * extension - prevents complex types derived by extension
	 * restriction - prevents complex types derived by restriction
	 * substitution - prevents substitution of elements
	 * #all - prevents all derived complex types
	 */
	public String blockDefault;

	/**
	 * Optional. Specifies the default value of the final attribute on element, simpleType, and complexType elements in the target namespace. The final attribute prevents a specified type of derivation of an element, simpleType, or complexType element. For element and complexType elements, this value can contain #all or a list that is a subset of extension or restriction. For simpleType elements, this value can additionally contain list and union:
	 * extension - prevents derivation by extension
	 * restriction - prevents derivation by restriction
	 * list - prevents derivation by list
	 * union - prevents derivation by union
	 * #all - prevents all derivation
	 */
	public String finalDefault;

	/**
	 * Optional. A URI reference of the namespace of this schema/
	 */
	public String targetNamespace;

	/**
	 * Optional. Specifies the version of the schema.
	 */
	public String version;

	@Override
	public String toString() {
		return "Schema{}";
	}
}